//该方法类用于封装axios，以便于设置baseUrl，前置操作，后置操作等
import axios from 'axios'
import { ElMessage } from 'element-plus'
import { router } from 'vue-router'

//基地址
const baseURL = 'http://localhost:8081'

const instance = axios.create({
  // 基础地址，超时时间
  baseURL,
  timeout: 100000,
})

//请求前置
instance.interceptors.request.use(
  (config) => {
    //携带token,1.放入pinia中，2.本地存储
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = token
    }
    return config
  },
  (err) => Promise.reject('发送请求异常:' + err),
)

//响应前置
instance.interceptors.response.use(
  (res) => {
    //处理业务失败消息
    if (res.data.code === 0) {
      return res
    }
    //处理核心响应数据
    ElMessage({ message: res.data.message || '未知错误', type: 'error' })
    return Promise.reject(res.data)
  },
  (err) => {
    ElMessage({ message: err.response.data.message || '服务异常', type: 'error' })
    console.log(err)
    if (err.response?.status === 401) {
      router.push('/login')
    }
    return Promise.reject(err)
  },
)

export default instance
